'''
Created on 27/03/2010

@author: kivson
'''

class TabelaRS(object):
    ''' 
    Tabela de simbolos reservados
    '''

    def __init__(self):
        ''' 
        Construtor
        '''
        self.__tokens = {}
        self.tokens.setdefault(None)


    def __get_tokens(self):
        return self.__tokens

        
    def carregaTabelaString(self, str):
        listaDeTokens = str.splitlines();
        for token in listaDeTokens:
            token = token.split()
            self.tokens[token[0],None] = {'nome':token[0],'classe':token[1]}
            
    def getToken(self, valor):
        return self.tokens.get(valor)
    
    def addToken(self, nomeEscopo, classe):
        if not isinstance(nomeEscopo, tuple):
            nomeEscopo = (nomeEscopo, None)
        if not self.getToken(nomeEscopo):
            self.tokens[nomeEscopo]={'nome':nomeEscopo[0],'classe':classe,'escopo':nomeEscopo[1]}
            return self.tokens[nomeEscopo]
        else:
            return None
    def addAtributo(self, nomeEscopo, nomeAtt=None, att=None, **kargs):
        if self.getToken(nomeEscopo):
            if nomeAtt != None and att != None:
                self.tokens[nomeEscopo][nomeAtt]=att
            self.tokens[nomeEscopo].update(kargs)
            return self.tokens[nomeEscopo]
        else:
            return None
        
        

    tokens = property(__get_tokens, None, None, None)
    

if __name__ == '__main__' :
    tabelaF = file ('../Tabela.txt')
    tabelaStr = tabelaF.read()
    tabela = TabelaRS();
    tabela.carregaTabelaString(tabelaStr)
    print tabela.tokens, '\n'
    print 'do =>', tabela.getToken('do'), '\n'
    print 'kivson =>', tabela.getToken('kivson'), '\n'
    print 'add existente => ', tabela.addToken('do', 'teste'), '\n'
    print 'add Nao existente', tabela.addToken('kivson', 'teste'), '\n'
    print 'add attr =>', tabela.addAtributo('do', 'cor', 0xffddff), '\n'
    print 'add attr =>', tabela.addAtributo('>=', 'cores', 0xffdfff), '\n'
    print 'add attr =>', tabela.addAtributo('>=', unidade=10), '\n'
    print tabela.tokens, '\n'
